package com.zh.netty.nio.zerocopy;

import java.io.FileInputStream;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.FileChannel;
import java.nio.channels.SocketChannel;

public class NewIOClient {
    public static void main(String[] args) throws IOException {
        SocketChannel socketChannel = SocketChannel.open();
        socketChannel.connect(new InetSocketAddress("localhost",7001));
        String fileName = "D:\\sys_dict_item.sql";

        // 得到一个文件channel
        FileInputStream inputStream = new FileInputStream(fileName);
        FileChannel fileChannel = inputStream.getChannel();

        // 准备发送
        long startTime = System.currentTimeMillis();

        // 在linux 下一个transferTo 方法可以完成传输
        // 在windows 下 ，一次调用transferTo 只能发送8m,就需要分段传输，而且要注意传输的位置
        // transferTo 底层使用到零拷贝
        long total = fileChannel.transferTo(0, fileChannel.size(), socketChannel);

        System.out.println("发送的总的字节数："+total+",耗时："+(System.currentTimeMillis()- startTime));

        // 关闭通道
        fileChannel.close();


    }
}
